home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / initramfs-tools / scripts / lupin-helpers < prev    next >
Text File  |  2008-04-22  |  3KB  |  83 lines

  1. . /scripts/casper-helpers
  2.  
  3. is_supported_fs(){
  4.     [ -z "${1}" ] && return 1
  5.     case ${1} in
  6.         ext2|ext3|xfs|jfs|reiserfs|vfat|ntfs|iso9660)
  7.             return 0
  8.             ;;
  9.     esac
  10.     return 1
  11. }
  12.  
  13. wait_for_devs(){
  14.     if [ -e /var/run/lupin-waited-for-devs ]; then
  15.         return
  16.     fi
  17.     [ "$quiet" != "y" ] && log_begin_msg "...waiting for devs..."
  18.     udevadm trigger --subsystem-match=block
  19.     udevadm settle
  20.     #TBD, modprobe on demand?
  21.     modprobe ext3
  22.     modprobe reiserfs
  23.     modprobe xfs
  24.     modprobe jfs
  25.     modprobe vfat
  26.     modprobe fuse
  27.     [ "$quiet" != "y" ] && log_end_msg "...devs loaded..."
  28.     touch /var/run/lupin-waited-for-devs
  29. }
  30.  
  31. find_path()
  32. {
  33.     local path="${1}"
  34.     # must match find_path_cleanup
  35.     local default_mountpoint="${2:-/tmpmountpoint}"
  36.     local mountoptions="${3:-ro}"
  37.     local mountpoint=
  38.     local dev devname devfstype
  39.     local trial_number
  40.     FOUNDDEV=
  41.     FOUNDPATH=
  42.     [ -z "${path}" ] && return 1
  43.     wait_for_devs
  44.     mkdir -p "${default_mountpoint}"
  45.     for trial_number in 1 2 3; do
  46.         [ $trial_number -gt 1 ] && sleep 3
  47.         for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v /ram | grep -v /loop | grep -v /fd); do
  48.             for dev in $(subdevices "${sysblock}"); do
  49.                 devname=$(sys2dev "${dev}")
  50.                 devfstype="$(get_fstype ${devname})"
  51.                 if is_supported_fs "${devfstype}" ; then
  52.                                     #if device is already mounted, do not remount
  53.                     if grep -q "^${devname} " /proc/mounts; then
  54.                         mountpoint=$(grep "^${devname} " /proc/mounts|cut -d ' ' -f 2)
  55.                         unmount=false                
  56.                     else                
  57.                         mountpoint="${default_mountpoint}"                    
  58.                         try_mount "$devname" "$mountpoint" "$mountoptions" || return 1
  59.                         unmount=true                
  60.                     fi                
  61.                     if [ -e "${mountpoint}${path}" ]; then
  62.                         FOUNDDEV="${devname}"
  63.                         FOUNDPATH="${mountpoint}${path}"
  64.                         return 0
  65.                     fi
  66.                     [ "${unmount}" = "true" ] && umount ${mountpoint} 2> /dev/null || true
  67.                 fi
  68.             done
  69.         done
  70.     done
  71.     return 1
  72. }
  73.  
  74. find_path_cleanup()
  75. {
  76.     # must match find_path
  77.     local default_mountpoint="${1:-/tmpmountpoint}"
  78.     if grep -q "^[^ ]* $default_mountpoint " /proc/mounts; then
  79.         umount "$default_mountpoint" 2>/dev/null || true
  80.     fi
  81.     rmdir "$default_mountpoint" 2>/dev/null || true
  82. }
  83.